#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"

#define LED_RED_GPIO     12  // 红灯 GPIO12
#define LED_YELLOW_GPIO  11  // 黄灯 GPIO11
#define LED_GREEN_GPIO   9   // 绿灯 GPIO9

// 时间常量（微秒）
#define RED_DURATION     5000000    // 红灯5秒
#define GREEN_DURATION   5000000    // 绿灯5秒
#define YELLOW_BLINK_INTERVAL 500000 // 黄灯闪烁间隔0.5秒

#define LED_ON  0   // 低电平点亮
#define LED_OFF 1   // 高电平熄灭

// 初始化GPIO
void light_Init(void) {
    // 红灯初始化
    IoTGpioInit(LED_RED_GPIO);
    IoTGpioSetDir(LED_RED_GPIO, IOT_GPIO_DIR_OUT);
    IoTGpioSetOutputVal(LED_RED_GPIO, LED_OFF);

    // 黄灯初始化（修正初始化错误）
    IoTGpioInit(LED_YELLOW_GPIO);
    IoTGpioSetDir(LED_YELLOW_GPIO, IOT_GPIO_DIR_OUT);
    IoTGpioSetOutputVal(LED_YELLOW_GPIO, LED_OFF);

    // 绿灯初始化
    IoTGpioInit(LED_GREEN_GPIO);
    IoTGpioSetDir(LED_GREEN_GPIO, IOT_GPIO_DIR_OUT);
    IoTGpioSetOutputVal(LED_GREEN_GPIO, LED_OFF);
}

// 控制单个LED
static void LedCtrl(int gpio, int state) {
    IoTGpioSetOutputVal(gpio, state);
}

// 红绿灯主逻辑
void TrafficLight(void) {
    light_Init();

    while (1) {
        // 红灯阶段
        LedCtrl(LED_RED_GPIO, LED_ON);
        LedCtrl(LED_YELLOW_GPIO, LED_OFF);
        LedCtrl(LED_GREEN_GPIO, LED_OFF);
        usleep(RED_DURATION);

        // 绿灯阶段
        LedCtrl(LED_RED_GPIO, LED_OFF);
        LedCtrl(LED_GREEN_GPIO, LED_ON);
        usleep(GREEN_DURATION);

        // 黄灯闪烁阶段（闪烁3次）
        LedCtrl(LED_GREEN_GPIO, LED_OFF);
        for (int i = 0; i < 3; i++) {
            LedCtrl(LED_YELLOW_GPIO, LED_ON);
            usleep(YELLOW_BLINK_INTERVAL);
            LedCtrl(LED_YELLOW_GPIO, LED_OFF);
            usleep(YELLOW_BLINK_INTERVAL);
        }
    }
}

SYS_RUN(TrafficLight);
